import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import * as CryptoJS from 'crypto-js';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class GetCodeService {
  // 接口地址
  private apiUrl = 'http://cloud.qianliling.com/spec-apps/api/app/rpachat/cusys/web/getCode';

  constructor(private http: HttpClient) { }

  /**
   * 获取 CODE 方法
   * @param appKey 客服问答 API 凭证中的 SecretId
   * @param secretKey 客服问答 API 凭证中的 SecretIdKey
   */
  getCode(appKey: string, secretKey: string): Observable<any> {
    // 当前时间戳（毫秒）
    const timestamp = Date.now();
    // 根据 appKey + secretKey + timestamp 拼接字符串生成 MD5 加密后的 sign
    const signStr = appKey + secretKey + timestamp;
    const sign = CryptoJS.MD5(signStr).toString();

    // 构造 JSON 字符串并 base64 加密生成 CUSYS-TOKEN
    const tokenObj = { appKey, timestamp, sign };
    const tokenJson = JSON.stringify(tokenObj);
    const cusysToken = btoa(tokenJson);

    // 设置请求头，加入 CUSYS-TOKEN 和 Content-Type
    const headers = new HttpHeaders({
      'Content-Type': 'application/json',
      'CUSYS-TOKEN': cusysToken
    });

    // 请求体：只需要 appKey 参数
    const body = { appKey };

    // 发送 POST 请求
    return this.http.post(this.apiUrl, body, { headers });
  }
}
